home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / win_a_d / dyndlg.zip / WNDPROC.LB < prev   
Text File  |  1992-07-17  |  13KB  |  366 lines

  1. //*-------------------------------------------------------------------------
  2. //| Title:
  3. //|     WNDPROC.C
  4. //|
  5. //| Contents:
  6. //|     MainWndProc()
  7. //*-------------------------------------------------------------------------
  8. #define _WINDOWS
  9. #include <WINDOWS.H>
  10. #include "WNDPROC.H"
  11. #include "Base_App.H"
  12. #include "GLOBALS.H"
  13.  
  14. //*-------------------------------------------------------------------------
  15. //| Title:
  16. //|     MainWndProc
  17. //|
  18. //| Parameters:
  19. //|     hWnd            - Handle to the message's destination window
  20. //|     wMessage        - Message number of the current message
  21. //|     wParam          - Additional info associated with the message
  22. //|     lParam          - Additional info associated with the message
  23. //|
  24. //| Purpose:
  25. //|     This is the window procedure for the application's main window.
  26. //*-------------------------------------------------------------------------
  27. LRESULT FAR PASCAL MainWndProc(HWND    hWnd,       
  28.                                UINT    wMessage,   
  29.                                WPARAM  wParam,     
  30.                                LPARAM  lParam)     
  31. {
  32.     static HICON  hIcon;
  33.  
  34.     switch (wMessage)
  35.         {
  36.  
  37.         case WM_CREATE:
  38.             hIcon = LoadIcon(ghInstance, "MyIcon");        // This icon will be used only for dragging
  39.             break;
  40.  
  41.         case WM_QUERYDRAGICON:
  42.            return (LRESULT)(WORD)hIcon;
  43.  
  44.         case WM_COMMAND:
  45.         {
  46.             FARPROC lpProcDlg;
  47.  
  48.             if (wParam == IDM_ABOUT) {
  49.                 lpProcDlg = MakeProcInstance(AboutBox, ghInstance);
  50.  
  51.                 DialogBox(ghInstance,
  52.                     "AboutBox",
  53.                     hWnd,
  54.                     lpProcDlg);
  55.  
  56.                 FreeProcInstance(lpProcDlg);
  57.                 break;
  58.             }
  59.             else
  60.             if (wParam == IDM_DIALOG) {
  61.                 lpProcDlg = MakeProcInstance(SpecialDlgBox, ghInstance);
  62.  
  63.                 DialogBox(ghInstance,
  64.                     "SpecialDlgBox",
  65.                     hWnd,
  66.                     lpProcDlg);
  67.  
  68.                 FreeProcInstance(lpProcDlg);
  69.                 break;
  70.             }
  71.             else
  72.                 return (LRESULT)(DefWindowProc(hWnd, wMessage, wParam, lParam));
  73.         }
  74.  
  75.         case WM_DESTROY:          // sent when window about to be destroyed
  76.             PostQuitMessage(0);   // Indicate that message loop should exit
  77.             break;                //   since the main window is being destroyed
  78.  
  79.         default:                  // Pass message on for default proccessing
  80.             return (LRESULT)DefWindowProc(hWnd, wMessage, wParam, lParam);
  81.         }
  82.  
  83.     // If we performed non-default processing on the message, return FALSE
  84.     return (LRESULT)FALSE;
  85. }
  86.  
  87.  
  88. BOOL FAR PASCAL AboutBox (HWND hDlg,
  89.                           WORD message,
  90.                           WORD wParam,
  91.                           LONG lParam)
  92. {
  93.  
  94.     switch (message) 
  95.     {
  96.  
  97.         case WM_INITDIALOG:
  98.             return (TRUE);
  99.   
  100.         case WM_COMMAND:
  101.             if (wParam == IDOK  || wParam == IDCANCEL) 
  102.             {
  103.                 EndDialog(hDlg, TRUE);
  104.                 return (TRUE);
  105.             }
  106.             break;
  107.             
  108.     }
  109.     return (FALSE);
  110. }
  111.  
  112. void near PASCAL ShowAllControls (HWND hDlg, int iFirst, int iLast, BOOL bShow)
  113. {
  114.   int  i;
  115.   RECT rect;
  116.  
  117. //  PostMessage (hDlg, WM_SETREDRAW, FALSE, 0L);
  118. //  for (i = iFirst; i < iLast; i++)
  119. //    ShowWindow (GetDlgItem (hDlg, i), bShow);
  120. //
  121. //  GetClientRect (GetDlgItem (hDlg, ID_FRAME), &rect);
  122. //  InvalidateRect (hDlg, &rect, TRUE);
  123. //  PostMessage (hDlg, WM_SETREDRAW, TRUE, 0L);
  124.  
  125.  HWND hFrame;
  126.  
  127.  
  128.   hFrame = GetDlgItem (hDlg, ID_FRAME);
  129.   PostMessage (hFrame, WM_SETREDRAW, FALSE, 0L);
  130.   for (i = iFirst; i < iLast; i++)
  131.     ShowWindow (GetDlgItem (hDlg, i), bShow);
  132.  
  133.   GetClientRect (hFrame, &rect);
  134.   InvalidateRect (hFrame, &rect, TRUE);
  135.   PostMessage (hFrame, WM_SETREDRAW, TRUE, 0L);
  136. }
  137.  
  138.  
  139. void near PASCAL AddIconToListBox (HWND hDlg, LPSTR myStr, HICON hIcon)
  140. {
  141.    WORD wIndex;
  142.  
  143.    wIndex = SendDlgItemMessage (hDlg, ID_LISTBOX, LB_ADDSTRING, 0, (LONG)myStr);
  144.    if (wIndex != LB_ERR && wIndex != LB_ERRSPACE)
  145.      SendDlgItemMessage (hDlg, ID_LISTBOX, LB_SETITEMDATA, wIndex, MAKELONG (hIcon, 0));
  146.  
  147.  
  148. void near PASCAL DrawItem (HWND hDlg, LPDRAWITEMSTRUCT lpdis)
  149. {
  150.    char       szItemString [15];
  151.    HICON      hIcon;
  152.    int        cxIcon, cyIcon;
  153.    RECT       lbRect, textRect;
  154.    TEXTMETRIC tm;
  155.  
  156.    cxIcon = GetSystemMetrics (SM_CXICON);
  157.    cyIcon = GetSystemMetrics (SM_CYICON);
  158.    GetTextMetrics (lpdis->hDC, &tm);
  159.  
  160.    SendDlgItemMessage (hDlg, ID_LISTBOX, LB_GETTEXT, lpdis->itemID,
  161.                       (LONG)(LPSTR)szItemString);
  162.    hIcon = (HICON)LOWORD (SendDlgItemMessage (hDlg, ID_LISTBOX, LB_GETITEMDATA,
  163.                        lpdis->itemID, 0L));
  164.  
  165.    GetClientRect (GetDlgItem (hDlg, ID_LISTBOX), &lbRect);
  166.    
  167.    DrawIcon(lpdis->hDC, lpdis->rcItem.left+(lbRect.right/2) - (cxIcon/2), 
  168.                         lpdis->rcItem.top + (tm.tmHeight/4), hIcon);
  169.  
  170.    textRect.left  = lpdis->rcItem.left;
  171.    textRect.top   = lpdis->rcItem.top + cyIcon + (tm.tmHeight/4);
  172.    textRect.right = lpdis->rcItem.right;    
  173.    textRect.bottom= lpdis->rcItem.bottom;
  174.    DrawText (lpdis->hDC, szItemString, lstrlen (szItemString),
  175.              &textRect, DT_CENTER);
  176.  
  177.  
  178. }
  179.  
  180.  
  181. BOOL FAR PASCAL SpecialDlgBox (HWND hDlg,
  182.                                WORD message,
  183.                                WORD wParam,
  184.                                LONG lParam)
  185. {
  186.     static int curFirst, curLast;
  187.     switch (message) 
  188.     {
  189.         case WM_INITDIALOG:
  190.             AddIconToListBox (hDlg, "FileOpen",     LoadIcon (ghInstance, "FOpenIcon"  ));
  191.             AddIconToListBox (hDlg, "Font",         LoadIcon (ghInstance, "FontIcon"   ));
  192.             AddIconToListBox (hDlg, "PrintSetup",   LoadIcon (ghInstance, "PrSetupIcon"));
  193.             AddIconToListBox (hDlg, "Print",        LoadIcon (ghInstance, "PrintIcon"  ));
  194.             AddIconToListBox (hDlg, "Find",         LoadIcon (ghInstance, "FindIcon"   ));
  195.             AddIconToListBox (hDlg, "Find/Replace", LoadIcon (ghInstance, "FindRepIcon"));
  196.  
  197.             ShowAllControls (hDlg,IDCD_FONTFIRST,    IDCD_FONTLAST,    SW_HIDE);
  198.             ShowAllControls (hDlg,IDCD_PRSETUPFIRST, IDCD_PRSETUPLAST, SW_HIDE);
  199.             ShowAllControls (hDlg,IDCD_PRINTFIRST,   IDCD_PRINTLAST,   SW_HIDE);
  200.             ShowAllControls (hDlg,IDCD_FINDFIRST,    IDCD_FINDLAST,    SW_HIDE);
  201.             ShowAllControls (hDlg,IDCD_REPFIRST,     IDCD_REPLAST,     SW_HIDE);
  202.  
  203.             curFirst = IDCD_FOPENFIRST;
  204.             curLast  = IDCD_FOPENLAST;
  205.             return TRUE;
  206.  
  207.         case WM_MEASUREITEM:
  208.            {
  209.              MEASUREITEMSTRUCT *ms;
  210.              TEXTMETRIC tm;
  211.              HDC  hDC;
  212.              int  cy;
  213.  
  214.              ms = (MEASUREITEMSTRUCT *)lParam;
  215.  
  216.              if (ms->CtlID == ID_LISTBOX)
  217.              {
  218.                cy = GetSystemMetrics (SM_CYICON);
  219.   
  220.                hDC = GetDC (hDlg);
  221.                GetTextMetrics (hDC, &tm);
  222.                ReleaseDC (hDlg, hDC);
  223.   
  224.                ms->itemHeight = cy + 1.5*tm.tmHeight;
  225.                ms->itemWidth  = 58;
  226.              }
  227.            } 
  228.            break;
  229.  
  230.         case WM_DRAWITEM:
  231.            {
  232.              LPDRAWITEMSTRUCT lpdis;
  233.  
  234.              lpdis = (LPDRAWITEMSTRUCT)lParam;
  235.  
  236.              if (lpdis->CtlID == ID_LISTBOX)
  237.              {            
  238.                DWORD  dwBkColor, dwOldBkColor, dwTextColor;
  239.                HBRUSH hBrush, hOldBrush;
  240.  
  241.                if (lpdis->itemID == -1)
  242.                  DrawFocusRect (lpdis->hDC, (LPRECT)&lpdis->rcItem);
  243.  
  244.                if ((lpdis->itemAction & ODA_FOCUS) && 
  245.                    (!lpdis->itemState  & ODS_FOCUS))
  246.                  DrawFocusRect (lpdis->hDC, (LPRECT)&lpdis->rcItem);
  247.  
  248.  
  249.                if (lpdis->itemState & ODS_SELECTED)
  250. //                 InvertRect   (lpdis->hDC, (LPRECT)&lpdis->rcItem);
  251.                {
  252.                  dwBkColor = GetSysColor (COLOR_HIGHLIGHT);
  253.                  dwTextColor=GetSysColor (COLOR_HIGHLIGHTTEXT);
  254.                } 
  255.                else
  256.                { 
  257.                  dwBkColor = GetSysColor (COLOR_WINDOW);
  258.                  dwTextColor=GetSysColor (COLOR_WINDOWTEXT);
  259.                }
  260.  
  261.                dwOldBkColor = SetBkColor (lpdis->hDC, dwBkColor);
  262.                SetTextColor (lpdis->hDC, dwTextColor);
  263.  
  264.                hBrush = CreateSolidBrush (dwBkColor);
  265.                hOldBrush = SelectObject (lpdis->hDC, hBrush);
  266.  
  267.                PatBlt (lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
  268.                                    lpdis->rcItem.right  - lpdis->rcItem.left,
  269.                                    lpdis->rcItem.bottom - lpdis->rcItem.top,
  270.                                    PATCOPY);
  271.  
  272.                DrawItem (hDlg, lpdis);
  273.  
  274.                SetBkColor (lpdis->hDC, dwOldBkColor);       // Reset background color
  275.                DeleteObject (SelectObject (lpdis->hDC, hOldBrush));
  276.  
  277.                if ((lpdis->itemAction & ODA_FOCUS) && 
  278.                    (lpdis->itemState  & ODS_FOCUS))
  279.                  DrawFocusRect (lpdis->hDC, (LPRECT)&lpdis->rcItem);
  280.  
  281.  
  282.              }             
  283.            }
  284.            return TRUE;
  285.  
  286.         case WM_COMMAND:  // wParam == IDOK || IDCANCEL
  287.             if (wParam == IDCD_FOPEN11   || wParam == IDCD_FOPEN12  ||
  288.                 wParam == IDCD_FONT7     || wParam == IDCD_FONT8    ||
  289.                 wParam == IDCD_PRINT17   || wParam == IDCD_PRINT18  ||
  290.                 wParam == IDCD_REP7      || wParam == IDCD_REP10    ||
  291.                 wParam == IDCD_FIND8     || wParam == IDCD_FIND9    ||
  292.                 wParam == IDCD_PRSETUP15 || wParam == IDCD_PRSETUP16)             
  293.             {
  294.                 EndDialog(hDlg, TRUE);
  295.                 return (TRUE);
  296.             }
  297.  
  298.             if (HIWORD(lParam) == LBN_SELCHANGE)
  299.             {
  300.                WORD wIndex;
  301.                wIndex = SendDlgItemMessage (hDlg, ID_LISTBOX, LB_GETCURSEL, 0, 0L);
  302.                if (wIndex == LB_ERR) break;
  303.  
  304.  
  305.                switch (wIndex)
  306.                {
  307.                   case IDI_FILEOPEN:
  308.                      if (curFirst == IDCD_FOPENFIRST) return (FALSE);
  309.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  310.                      curFirst = IDCD_FOPENFIRST;
  311.                      curLast  = IDCD_FOPENLAST;     
  312.                      break;
  313.  
  314.                   case IDI_FONT:
  315.                      if (curFirst == IDCD_FONTFIRST) return (FALSE);
  316.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  317.                      curFirst = IDCD_FONTFIRST;
  318.                      curLast  = IDCD_FONTLAST;     
  319.                      break;
  320.  
  321.                   case IDI_PRSETUP:
  322.                      if (curFirst == IDCD_PRSETUPFIRST) return (FALSE);
  323.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  324.                      curFirst = IDCD_PRSETUPFIRST;
  325.                      curLast  = IDCD_PRSETUPLAST;     
  326.                      break;
  327.  
  328.                   case IDI_PRINT:
  329.                      if (curFirst == IDCD_PRINTFIRST) return (FALSE);
  330.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  331.                      curFirst = IDCD_PRINTFIRST;
  332.                      curLast  = IDCD_PRINTLAST;     
  333.                      break;
  334.  
  335.                   case IDI_FIND:
  336.                      if (curFirst == IDCD_FINDFIRST) return (FALSE);
  337.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  338.                      curFirst = IDCD_FINDFIRST;
  339.                      curLast  = IDCD_FINDLAST;     
  340.                      break;
  341.  
  342.                   case IDI_REPLACE:
  343.                      if (curFirst == IDCD_REPFIRST) return (FALSE);
  344.                      ShowAllControls (hDlg, curFirst, curLast, SW_HIDE);
  345.                      curFirst = IDCD_REPFIRST;
  346.                      curLast  = IDCD_REPLAST;     
  347.                      break;
  348.  
  349.                   default : break;
  350.                }
  351.                ShowAllControls (hDlg, curFirst,  curLast,  SW_SHOW);
  352.                   
  353.             }
  354.             break;
  355.  
  356.        case WM_CLOSE:
  357.             EndDialog(hDlg, TRUE);
  358.             return TRUE;
  359.             
  360.     }
  361.     return (FALSE);
  362. }
  363.  
  364.  
  365.